﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ControlsLib.Filters;
using GestionePolveriLib.Facades;
using GestionePolveriLib.BL;
using GestionePolveriLib.BL.FilterBags;
using GestionePolveriLib.Utilities;

namespace GestionePolveri2.Filters
{
    public partial class ReportDirezionaleFilter : ReportDirezioneFilterBase
    {
        public ReportDirezionaleFilter()
        {
            InitializeComponent();

            if (!DesignMode)
            {
                RefreshData();

                this.FromDate = DateTime.Now;
                this.ToDate = DateTime.Now;

                this.rbPolveriAll.Tag = PolvereTypes.Tutte;
                this.rbPolveriNormali.Tag = PolvereTypes.Normali;
                this.rbPolveriXXXX.Tag = PolvereTypes.XXXX;

                this.rbOrdFamCodCol.Checked = true;
                this.rbPolveriAll.Checked = true;
            }
        }

        protected override void SetVisibleCore(bool value)
        {
            base.SetVisibleCore(value);

            RefreshData();
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            RefreshData();

            this.FromDate = DateTime.Now;
            this.ToDate = DateTime.Now;

            this.rbPolveriAll.Tag = PolvereTypes.Tutte;
            this.rbPolveriNormali.Tag = PolvereTypes.Normali;
            this.rbPolveriXXXX.Tag = PolvereTypes.XXXX;

            this.rbOrdFamCodCol.Checked = true;
            this.rbPolveriAll.Checked = true;
        }

        protected override void OnResetFilter(EventArgs e)
        {
            this.cmbColori.SelectedIndex = -1;
            this.cmbPolveri.SelectedIndex = -1;
            this.cmbTipologiaSM.SelectedIndex = -1;
            this.chkCmbFamiglia.SetEditValue(null);
            this.chkCmbFamiglia.Text = "Seleziona un famiglia";
            this.chkCmbImpianti.SetEditValue(null);
            this.chkCmbImpianti.Text = "Seleziona un impianto";
            this.cmbLotti.SelectedIndex = -1;
            this.chkCmbApplicazione.DeselectAll();
            this.chkCmbApplicazione.SetEditValue(null);

            this.FilterBag.CodiceColore = null;
            this.FilterBag.CodicePolvere = null;
            this.FilterBag.Applicazione = null;
            this.FilterBag.Famiglia = null;
            this.FilterBag.Impianto = null;
            this.FilterBag.Tipo = PolvereTypes.Tutte;
            this.FilterBag.Fornitore = null;

            this.rbOrdFamCodCol.Checked = true;
            this.rbPolveriAll.Checked = true;

            base.OnResetFilter(e);
        }

        protected override void OnExecuteFilter(EventArgs e)
        {
            this.FilterBag.UseDates = this.UseDatesFilter;

            if (!this.UseDatesFilter)
            {
                this.FilterBag.PeriodFrom = null;
                FilterBag.PeriodTo = null;
            }
            else
            {
                FilterBag.PeriodFrom = this.FromDate;
                FilterBag.PeriodTo = this.ToDate;
            }

            //if (this.cmbColori.SelectedItem == null)
            //    this.cmbColori.SelectedIndex = -1;
            //if (this.cmbPolveri.SelectedItem == null)
            //    this.cmbPolveri.SelectedIndex = -1;
            //if (this.cmbLotti.SelectedItem == null)
            //    this.cmbLotti.SelectedIndex = -1;
            //if (this.cmbFornitori.SelectedItem == null)
            //    this.cmbFornitori.SelectedIndex = -1;

            Fornitore fornitoreSelected = FilterComboBoxHelper.GetSelectedItem<Fornitore>(this.cmbFornitori);
            Lotto lottoSelected = FilterComboBoxHelper.GetSelectedItem<Lotto>(this.cmbLotti);
            Colore coloreSelected = FilterComboBoxHelper.GetSelectedItem<Colore>(this.cmbColori);
            Polvere polvereSelected = FilterComboBoxHelper.GetSelectedItem<Polvere>(this.cmbPolveri);
            TipologiaScortaMinima tipologiaSMSelected = FilterComboBoxHelper.GetSelectedItem<TipologiaScortaMinima>(this.cmbTipologiaSM);

            FilterBag.Fornitore = (fornitoreSelected == null ? null : (fornitoreSelected.ID == -1 ? null : (fornitoreSelected == null ? null : fornitoreSelected.Descrizione)));
            FilterBag.CodiceLotto = (lottoSelected == null ? null : (lottoSelected.IDLotto == -1 ? null : (lottoSelected == null ? null : lottoSelected.CodLotto)));
            FilterBag.CodiceColore = (coloreSelected == null ? null : (coloreSelected.ID == -1 ? null : (coloreSelected == null ? null : coloreSelected.CodiceColore)));
            FilterBag.CodicePolvere = (polvereSelected == null ? null : (polvereSelected.ID == -1 ? null : (polvereSelected == null ? null : polvereSelected.CodicePolvere)));
            FilterBag.TipologiaSM = (tipologiaSMSelected == null ? null : (tipologiaSMSelected.ID == -1 ? null : (tipologiaSMSelected == null ? null : tipologiaSMSelected.Codice)));

            FilterBag.Applicazione = (this.chkCmbApplicazione.Properties.GetCheckedItems().ToString() == string.Empty ? null : this.chkCmbApplicazione.Properties.GetCheckedItems().ToString());
            FilterBag.Famiglia = (this.chkCmbFamiglia.Properties.GetCheckedItems().ToString() == string.Empty ? null : this.chkCmbFamiglia.Properties.GetCheckedItems().ToString());
            FilterBag.Impianto = (this.chkCmbImpianti.Properties.GetCheckedItems().ToString() == string.Empty ? null : this.chkCmbImpianti.Properties.GetCheckedItems().ToString());
 
            FilterBag.Ordinamento = (byte?)(this.rbOrdFamCodPolv.Checked ? 1 : 2);
            FilterBag.Tipo = (PolvereTypes)(rbPolveriAll.Checked ? rbPolveriAll.Tag : (rbPolveriNormali.Checked ? rbPolveriNormali.Tag : rbPolveriXXXX.Tag));

            if (FilterBag.Famiglia != null)
              FilterBag.Famiglia = FilterBag.Famiglia.Replace(" ", "");

            if (FilterBag.Applicazione != null)
                FilterBag.Applicazione = FilterBag.Applicazione.Replace(" ", "");

            //if (
            //    (this.cmbColori.SelectedIndex == 0) &&
            //    (this.cmbPolveri.SelectedIndex == 0) &&
            //    (FilterBag.ColoriAbbinati == null) &&
            //    (FilterBag.CodicePolvere == null) &&
            //    (FilterBag.Applicazione == null) &&
            //    (FilterBag.Tipo == PolvereTypes.Tutte) &&
            //    (FilterBag.Famiglia == null) &&
            //    (FilterBag.Impianto == null) &&
            //    (FilterBag.UseDates == false)
            //  )
            //{
            //    OnResetFilter(e);
            //    this.OnFilterButtonClick();
            //}
            //else
            //{
                base.OnExecuteFilter(e);
            //}

            //base.OnExecuteFilter(e);
        }

        public override void RefreshData()
        {
            LoadPolveri();
            LoadColori();
            LoadImpianti();
            LoadFamiglie();
            LoadFornitori();
            LoadLotti();
            LoadApplicazione();
            LoadTipologieSM();
        }

        private void LoadApplicazione()
        {
            chkCmbApplicazione.Properties.Items.Clear();

            chkCmbApplicazione.Properties.Items.Add("b", "Base");
            chkCmbApplicazione.Properties.Items.Add("v", "Venatura");
        }

        private void LoadPolveri()
        {
            FilterComboBoxHelper.SetupPolveriComboBox(this.cmbPolveri);
        }

        private void LoadColori()
        {
            FilterComboBoxHelper.SetupColoriComboBox(this.cmbColori);
        }

        private void LoadImpianti()
        {
            ImpiantoFacade pf = new ImpiantoFacade();

            pf.RunAsync(() => pf.GetImpianti2(), (result) =>
            {
                if (result != null)
                {
                    this.chkCmbImpianti.Properties.DisplayMember = "Nome";
                    this.chkCmbImpianti.Properties.ValueMember = "ID";
                    this.chkCmbImpianti.Properties.DataSource = result;
                }
            });
        }

        private void LoadFamiglie()
        {
            FamigliaColoriFacade pf = new FamigliaColoriFacade();

            pf.RunAsync(() => pf.GetAll(), (result) =>
            {
                if (result != null)
                {
                    this.chkCmbFamiglia.Properties.Items.Clear();

                    this.chkCmbFamiglia.Properties.DisplayMember = "Descrizione";
                    this.chkCmbFamiglia.Properties.ValueMember = "ID";
                    this.chkCmbFamiglia.Properties.DataSource = result;
                }
            });
        }

        public void LoadLotti()
        {
            FilterComboBoxHelper.SetupLottiComboBox(this.cmbLotti);
        }

        private void LoadFornitori()
        {
            FilterComboBoxHelper.SetupFornitoriComboBox(this.cmbFornitori);
        }

        private void LoadTipologieSM()
        {
            FilterComboBoxHelper.SetupTipologieSMPComboBox(this.cmbTipologiaSM);
        }
    }

    public class ReportDirezioneFilterBase : FilterContainerBase2<ReportDirezionaleFilterBag> {}
}
